/*
* 
* Fichier source projet intel Acceler8 sous license GNU GPL v3.
* Voir http://www.gnu.org/copyleft/gpl.html pour plus d'informations
* La license est egalement disponible dans le repertoire /doc
* 
* Cree le : mercredi 09 novembre 2011 à 21 : 26.
* Auteurs : Axel MOINET et Arnaud DURAND.
* 
* Nom de fichier : threadprincipal.h
* Chemin du fichier : ./src/classes/threadprincipal/threadprincipal.h
* 
* Description : Classe d'implémentation du thread principal.
* 			Gère la communication entre les différentes composantes du programme.
* 
*/

#ifndef THREAD_PRINCIPAL_H_INCLUDED
#define THREAD_PRINCIPAL_H_INCLUDED

#include "tbb/tbb_thread.h"
#include "tbb/spin_rw_mutex.h"
#include "../../generic/typedefs.h"

class threadPrincipal {

public :
	threadPrincipal(int p_nbJetonsLecture, int p_nbJetonsCalcul, char *p_filepath);
	~threadPrincipal();

	tableauSommePrefixe* getPrefixeTab();
	tbb::concurrent_vector<tbb::concurrent_vector<int> >* getCghTab();
	int pushBackCghTab(tbb::concurrent_vector<int> *p_cgh);
	FLAG getEndFileFlag();
	int setEndFileFlag();
	FLAG getCghComputeEndingFlag();
	int setCghComputeEndingFlag();
	struct result* getStructureResult();
	int setComputeEndingFlag();
	FLAG getComputeEndingFlag();

	tbb::concurrent_vector<int> *result;

	tbb::spin_rw_mutex_v3 mutexControlResult;

	int *g;
	int *h;
	int nbJetonsLecture;
	int nbJetonsCalcul;
	char* filepath;

private :
	//flag qui définit si le fichier en entrée à été entièrement lu
	FLAG endfile;
	//flag qui dit qu'on a calculé tous les Cgh possibles
	FLAG cghComputeEnding;
	//flag qui dit que le dernier calcul est termine
	FLAG computeEnding;

	struct result *resultatFinal;
	tableauSommePrefixe *tableau;
	tbb::concurrent_vector<tbb::concurrent_vector<int> > *cghTab;
};

#endif
